I'm experimenting with the "IsDNAsAnchor" management agent capability, but if I set it to true the Management Agent creation dialog loops to the "Configure Anchors" page after I click finish, without showing any error or writing anything in the event log.
You can see the problem in this video.
Is there something particular I should do to get "IsDNAsAnchor" to work properly?
I would like to use the FIM object ID as a DN, and I don't care about having a different anchor attribute.
This piece of code allows to reproduce the problem:
using Microsoft.MetadirectoryServices; using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace ecma2_test { public partial class TestAgent : IMAExtensible2GetParameters, IMAExtensible2GetCapabilitiesEx, IMAExtensible2GetSchema, IMAExtensible2CallExport, IMAExtensible2CallImport { // IMAExtensible2GetParameters public IList<ConfigParameterDefinition> GetConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) { var ret = new List<ConfigParameterDefinition>(); switch (page) { case ConfigParameterPage.Capabilities: ret.Add(ConfigParameterDefinition.CreateCheckBoxParameter("IsDNAsAnchor", false)); break; case ConfigParameterPage.Connectivity: // see http://social.technet.microsoft.com/Forums/en-US/34c40677-0208-47bf-9371-1efefeb585e6/weird-ecma2-ma-problem-create-management-agent-dialog-loops-to-capabilities-page ret.Add(ConfigParameterDefinition.CreateCheckBoxParameter("Avoid Catastrophic Failures", true)); break; } return ret; } public ParameterValidationResult ValidateConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) { return new ParameterValidationResult(); } // IMAExtensible2GetCapabilitiesEx public MACapabilities GetCapabilitiesEx(KeyedCollection<string, ConfigParameter> configParameters) { MACapabilities capabilities = new MACapabilities(); capabilities.IsDNAsAnchor = (configParameters["IsDNAsAnchor"].Value == "1"); return capabilities; } // IMAExtensible2GetSchema public Schema GetSchema(KeyedCollection<string, ConfigParameter> configParameters) { SchemaType personType = SchemaType.Create("Person", lockAnchorDefinition: true); personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute("dn", AttributeType.String)); personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("name", AttributeType.String)); personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("email", AttributeType.String)); Schema schema = Schema.Create(); schema.Types.Add(personType); return schema; } // IMAExtensible2CallExport public void CloseExportConnection(CloseExportConnectionRunStep exportRunStep) { throw new NotImplementedException(); } public int ExportDefaultPageSize { get { return 1000; } } public int ExportMaxPageSize { get { return 5000; } } public void OpenExportConnection(KeyedCollection<string, ConfigParameter> configParameters, Schema types, OpenExportConnectionRunStep exportRunStep) { throw new NotImplementedException(); } public PutExportEntriesResults PutExportEntries(IList<CSEntryChange> csentries) { throw new NotImplementedException(); } // IMAExtensible2CallImport public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep) { throw new NotImplementedException(); } public GetImportEntriesResults GetImportEntries(GetImportEntriesRunStep importRunStep) { throw new NotImplementedException(); } public int ImportDefaultPageSize { get { return 1000; } } public int ImportMaxPageSize { get { return 5000; } } public OpenImportConnectionResults OpenImportConnection(KeyedCollection<string, ConfigParameter> configParameters, Schema types, OpenImportConnectionRunStep importRunStep) { throw new NotImplementedException(); } } }